From 66e5027756e83f9a20aad60f1df3d7a70baaeef5 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 20 Dec 2019 14:07:14 -0500 Subject: [PATCH] columnview: Add a GtkColumnViewColumn:resizable property This will be used for interactive column resizing in the future. --- docs/reference/gtk/gtk4-sections.txt | 2 + gtk/gtkcolumnviewcolumn.c | 60 ++++++++++++++++++++++++++++ gtk/gtkcolumnviewcolumn.h | 6 +++ 3 files changed, 68 insertions(+) diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt index c88feaa21a..a43604c216 100644 --- a/docs/reference/gtk/gtk4-sections.txt +++ b/docs/reference/gtk/gtk4-sections.txt @@ -533,6 +533,8 @@ gtk_column_view_column_set_sorter gtk_column_view_column_get_sorter gtk_column_view_column_set_visible gtk_column_view_column_get_visible +gtk_column_view_column_set_resizable +gtk_column_view_column_get_resizable gtk_column_view_column_set_header_menu gtk_column_view_column_get_header_menu gtk_column_view_column_set_fixed_width diff --git a/gtk/gtkcolumnviewcolumn.c b/gtk/gtkcolumnviewcolumn.c index fa0e0982bb..89157b5236 100644 --- a/gtk/gtkcolumnviewcolumn.c +++ b/gtk/gtkcolumnviewcolumn.c @@ -64,6 +64,7 @@ struct _GtkColumnViewColumn int fixed_width; guint visible : 1; + guint resizable : 1; GMenuModel *menu; @@ -85,6 +86,7 @@ enum PROP_SORTER, PROP_VISIBLE, PROP_HEADER_MENU, + PROP_RESIZABLE, PROP_FIXED_WIDTH, N_PROPS @@ -144,6 +146,10 @@ gtk_column_view_column_get_property (GObject *object, g_value_set_object (value, self->menu); break; + case PROP_RESIZABLE: + g_value_set_boolean (value, self->resizable); + break; + case PROP_FIXED_WIDTH: g_value_set_int (value, self->fixed_width); break; @@ -184,6 +190,10 @@ gtk_column_view_column_set_property (GObject *object, gtk_column_view_column_set_header_menu (self, g_value_get_object (value)); break; + case PROP_RESIZABLE: + gtk_column_view_column_set_resizable (self, g_value_get_boolean (value)); + break; + case PROP_FIXED_WIDTH: gtk_column_view_column_set_fixed_width (self, g_value_get_int (value)); break; @@ -275,6 +285,18 @@ gtk_column_view_column_class_init (GtkColumnViewColumnClass *klass) G_TYPE_MENU_MODEL, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + /** + * GtkColumnViewColumn:resizable: + * + * Whether this column is resizable + */ + properties[PROP_RESIZABLE] = + g_param_spec_boolean ("resizable", + P_("Resizable"), + P_("Whether this column is resizable"), + FALSE, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + /** * GtkColumnViewColumn:fixed-width: * @@ -297,6 +319,7 @@ gtk_column_view_column_init (GtkColumnViewColumn *self) self->minimum_size_request = -1; self->natural_size_request = -1; self->visible = TRUE; + self->resizable = FALSE; self->fixed_width = -1; } @@ -820,6 +843,43 @@ gtk_column_view_column_get_header_menu (GtkColumnViewColumn *self) return self->menu; } +/** + * gtk_column_view_column_set_resizable: + * @self: a #GtkColumnViewColumn + * @resizable: whether this column should be resizable + * + * Sets whether this column should be resizable by dragging. + */ +void +gtk_column_view_column_set_resizable (GtkColumnViewColumn *self, + gboolean resizable) +{ + g_return_if_fail (GTK_IS_COLUMN_VIEW_COLUMN (self)); + + if (self->resizable == resizable) + return; + + self->resizable = resizable; + + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_RESIZABLE]); +} + +/** + * gtk_column_view_get_resizable: + * @self: a #GtkColumnView + * + * Returns whether this column is resizable. + * + * Returns: %TRUE if this column is resizable + */ +gboolean +gtk_column_view_column_get_resizable (GtkColumnViewColumn *self) +{ + g_return_val_if_fail (GTK_IS_COLUMN_VIEW_COLUMN (self), TRUE); + + return self->resizable; +} + /** * gtk_column_view_column_set_fixed_width: * @self: a #GtkColumnViewColumn diff --git a/gtk/gtkcolumnviewcolumn.h b/gtk/gtkcolumnviewcolumn.h index 6738bfe67b..459c4d372f 100644 --- a/gtk/gtkcolumnviewcolumn.h +++ b/gtk/gtkcolumnviewcolumn.h @@ -90,6 +90,12 @@ void gtk_column_view_column_set_fixed_width (GtkColu GDK_AVAILABLE_IN_ALL int gtk_column_view_column_get_fixed_width (GtkColumnViewColumn *self); +GDK_AVAILABLE_IN_ALL +void gtk_column_view_column_set_resizable (GtkColumnViewColumn *self, + gboolean resizable); +GDK_AVAILABLE_IN_ALL +gboolean gtk_column_view_column_get_resizable (GtkColumnViewColumn *self); + G_END_DECLS #endif /* __GTK_COLUMN_VIEW_COLUMN_H__ */ -- 2.30.2